package com.dongzili.postgresql.common.auth;

import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;

import java.util.List;

/** 当前登录用户信息帮助工具类 */
public class UserHelper {

    public static LoginUser getCurrentUserWithNull(){
        if (!StpUtil.isLogin()){
            return null;
        }
        return (LoginUser) StpUtil.getSession().get("user");
    }

    /** 获取当前登录会话的用户信息 */
    public static LoginUser getCurrentUser(){
        if (!StpUtil.isLogin()){
            throw new NotLoginException("请去登录...","","");
        }
        return (LoginUser) StpUtil.getSession().get("user");
    }

    /** 获取当前登录会话的角色 */
    public static LoginRole getCurrentUserRole(){
        if (getCurrentUser().getRole()!=null){
            return getCurrentUser().getRole();
        }
        return null;
    }

    /** 获取所有已登录的会话id */
    public static Integer getCurrentUserCount(){
        List<String> sessionIdList = StpUtil.searchSessionId("", 0, -1, false);
//        for (String sessionId : sessionIdList) {
//
//            // 根据会话id，查询对应的 SaSession 对象，此处一个 SaSession 对象即代表一个登录的账号
//            SaSession session = StpUtil.getSessionBySessionId(sessionId);
//
//            // 查询这个账号都在哪些设备登录了，依据上面的示例，账号A 的 SaTerminalInfo 数量是 3，账号B 的 SaTerminalInfo 数量是 2
//            List<SaTerminalInfo> terminalList = session.terminalListCopy();
//            System.out.println("会话id：" + sessionId + "，共在 " + terminalList.size() + " 设备登录");
//        }
        return sessionIdList.size();
    }
}
